from datetime import datetime, timedelta
from models import Todo, TodoStatus, TodoPriority
import random

# Mock 数据存储（在实际项目中应该使用数据库）
mock_todos = []

def init_mock_data():
    """初始化20条 mock 数据"""
    global mock_todos
    
    # 清空现有数据
    mock_todos.clear()
    
    # 示例任务标题和描述
    sample_tasks = [
        ("完成项目文档", "整理项目的技术文档和用户手册"),
        ("修复登录页面bug", "解决用户登录时验证码显示异常的问题"),
        ("设计数据库架构", "为新功能模块设计合适的数据库表结构"),
        ("编写单元测试", "为核心业务逻辑编写完整的单元测试用例"),
        ("优化页面加载速度", "分析并优化首页加载性能，目标减少50%加载时间"),
        ("实现用户权限管理", "开发基于角色的用户权限控制系统"),
        ("代码重构", "重构旧代码，提高代码可读性和维护性"),
        ("准备技术分享", "准备下周团队技术分享的PPT和demo"),
        ("更新API文档", "根据最新接口变更更新API文档"),
        ("处理客户反馈", "分析并处理客户提出的功能改进建议"),
        ("服务器部署", "将最新版本部署到生产环境"),
        ("数据备份", "执行数据库的定期备份任务"),
        ("安全漏洞修复", "修复安全扫描发现的高危漏洞"),
        ("移动端适配", "优化网页在移动设备上的显示效果"),
        ("第三方集成", "集成支付宝支付接口"),
        ("性能监控", "设置应用性能监控和告警机制"),
        ("用户体验优化", "根据用户反馈优化交互流程"),
        ("版本发布", "准备v2.0版本的发布计划"),
        ("团队培训", "组织新技术栈的团队培训"),
        ("项目总结", "撰写项目阶段性总结报告")
    ]
    
    # 生成20条 mock 数据
    base_time = datetime.now()
    
    for i, (title, description) in enumerate(sample_tasks):
        # 随机生成创建时间（过去30天内）
        created_days_ago = random.randint(0, 30)
        created_at = base_time - timedelta(days=created_days_ago)
        
        # 更新时间在创建时间之后
        updated_hours_ago = random.randint(0, created_days_ago * 24) if created_days_ago > 0 else random.randint(0, 24)
        updated_at = created_at + timedelta(hours=updated_hours_ago)
        
        # 随机状态和优先级
        status = random.choice(list(TodoStatus))
        priority = random.choice(list(TodoPriority))
        
        todo = Todo(
            id=i + 1,
            title=title,
            description=description,
            status=status,
            priority=priority,
            order=i,  # 设置初始排序
            created_at=created_at,
            updated_at=updated_at
        )
        
        mock_todos.append(todo)
    
    # 按排序字段排序（数值越小越靠前）
    mock_todos.sort(key=lambda x: x.order)
    
    print(f"✅ 已初始化 {len(mock_todos)} 条 mock 数据")

def get_all_todos():
    """获取所有待办事项（按排序字段排序）"""
    # 按排序字段排序返回
    sorted_todos = sorted(mock_todos, key=lambda x: x.order)
    return sorted_todos.copy()

def get_todo_by_id(todo_id: int):
    """根据ID获取待办事项"""
    for todo in mock_todos:
        if todo.id == todo_id:
            return todo
    return None

def create_todo(todo_data: dict):
    """创建新的待办事项"""
    # 生成新的ID
    new_id = max([todo.id for todo in mock_todos], default=0) + 1
    
    # 获取最大的 order 值，新任务默认放在最后
    max_order = max([todo.order for todo in mock_todos], default=-1) + 1
    
    now = datetime.now()
    new_todo = Todo(
        id=new_id,
        title=todo_data["title"],
        description=todo_data.get("description"),
        status=todo_data.get("status", TodoStatus.PENDING),
        priority=todo_data.get("priority", TodoPriority.MEDIUM),
        order=todo_data.get("order", max_order),  # 支持设置排序
        created_at=now,
        updated_at=now
    )
    
    mock_todos.append(new_todo)
    return new_todo

def update_todo(todo_id: int, update_data: dict):
    """更新待办事项"""
    for i, todo in enumerate(mock_todos):
        if todo.id == todo_id:
            # 创建更新后的待办事项
            updated_fields = update_data.copy()
            updated_fields["updated_at"] = datetime.now()
            
            # 只更新提供的字段
            todo_dict = todo.dict()
            todo_dict.update(updated_fields)
            
            updated_todo = Todo(**todo_dict)
            mock_todos[i] = updated_todo
            return updated_todo
    return None

def delete_todo(todo_id: int):
    """删除待办事项"""
    for i, todo in enumerate(mock_todos):
        if todo.id == todo_id:
            deleted_todo = mock_todos.pop(i)
            return deleted_todo
    return None

# 在模块加载时初始化数据
init_mock_data()